下方程式碼片段全部都是擷取自 Secure Code Warrior 線上安全程式培訓平台,因為練習互動時的題目多半不會只有單一個檔案,可能涉及多個檔案、資料夾及多處地方修改,因此我的文章主要是針對最主要的區塊做修改及說明,若有不好理解的地方非常抱歉也還請見諒,也可以實際上去 Secure Code Warrior 玩玩看,搭配著互動,會更有感的學習哦~
http://site.com/app/admin_statuspage
POST/action/createUser HTTP/1.1... name=attacker&pw=3GYT!6&role=admin
createUser
函式並沒有做限制所以攻擊者可以成功創建一個新的使帳戶load();
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
save();
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
除了資料庫上的永久讀/寫操作可能導致拒絕服務(DoS)問題外,它還可能導致錯誤的資料(如密碼)被插入資料庫中。雖然它在解析函式中重置,但惡意程式可能會覆蓋密碼,使程式崩潰,阻止密碼安全重置。
把錯誤區塊移到上方函式內:
database(const std::string &database_name) : _file(std::fopen(database_name.c_str(), "rwb"))
{
load();
_password = get("password");
}
~database()
{
set("password", _password);
save();
std::fclose(_file);
};
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
在啟動和正確退出時讀取資料庫是確保不會出現不一致或訪問錯誤的正確方法。
AllResearch();
messg = "SHOW ALL RESEARCH";
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
在研究人員選單中呼叫AllResearch
功能,允許研究人員檢視其他研究人員的研究。 Research 選單是只有所有者或超級使用者才能存取的資訊。
把錯誤代碼改成
ResearchByUser();
messg = "SEARCH RESR BY USR";
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
只有管理員才能看到實驗室完成的所有研究。其他研究人員一定不能看到其他研究人員所做的工作,因為在一些實驗室,研究被視為機密資訊。